/** 页面优化相关包（防抖节流等） **/
export const OptimizeUtil = {
  /**
   * 去抖：当调用动作触发一段时间后，才会执行该动作，若在这段时间间隔内又调用此动作则将重新计算时间间隔。
   * @param action
   * @param delay
   * @returns {function(...[*]=)}
   */
  debounce(action, delay) {
    let timer = null;

    return function () {
      const self = this;
      const args = arguments;

      clearTimeout(timer);
      timer = setTimeout(function () {
        action.apply(self, args);
      }, delay);
    };
  },

  /**
   * 节流：预先设定一个执行周期，当调用动作的时刻大于等于执行周期则执行该动作，然后进入下一个新的时间周期。
   * @param action
   * @param delay
   * @returns {function(...[*]=)}
   */
  throttle(action, delay) {
    let startTime = 0;

    return function () {
      const curTime = +new Date();

      if (curTime - startTime > delay) {
        action.apply(this, arguments);
        startTime = curTime;
      }
    };
  },
};
